Computer systems are well known in the art. They have attained widespread use for providing computer power to many segments of today's modern society. Computers are available in many different forms such as a desktop, floor standing, or portable computers and include, e.g., one or more central processing units (CPUs) and associated volatile and non-volatile memory. Some computer systems also include a display, an input-output device such as a keyboard and/or a mouse, one or more storage devices such as hard disk drives, and, in many instances, a network interface adapter. One of the distinguishing characteristics of these systems is the use of a motherboard or system planar to electrically connect these components together. Examples of such computer systems are IBM's e-Server series, ThinkPad series, and Intellistation series.
The widespread use of personal computers in conjunction with networks has resulted in a reliance on the network resources such as e-business enterprises for, e.g., telecommuting, obtaining news and stock market information, trading, banking, shopping, shipping, communicating in the form of Voice Internet protocol (VoiceIP) and email, as well as other services. For many, PCs represent an essential tool for their livelihood. Thus, in today's networked world, the availability and performance of the network is as important as the availability and performance of the personal computer.
Today's e-business environment is very competitive so there is no room for failure. Servers such as the IBM pSeries help e-business enterprises remain competitive by remaining operational 24/7, 365 days a year. Because reliability is mission-critical, such servers include features to monitor for problems, correct or bypass minor problems on the fly, and hot swappable components to allow failed components to be replaced without powering down the server.
Performance is also mission-critical. Performance relates not only to the response time of the server when loading and executing software for interactions with client systems but also the efficiency of systems designed to power up the server. The faster a program executes a function, the faster the server can respond to requests from client systems.
One problem faced by hardware and software designers for servers is that the servers are designed to increase performance generally for a large number of applications. Specific applications that clients may execute on servers involve different configurations of hardware and software. As a result, clients typically realize different levels of performance based upon their server configuration and the applications loaded on the server.
Software designers, in particular, are faced with designs that anticipate a multitude of applications, especially when the computer system for which the software is designed has the exceptional processing power of servers like IBMs e-Servers. When designing logic to be generally applicable for any clients' server configuration, a software designer may consider many possible code paths for a particular function to be interchangeable, or reflexive, for the purpose of attaining the desired result. For instance, a software designer may design a linked list data structure and, based upon the countless possible applications that could use and/or interact with the data structure, the software designer may believe that a code path that stores new links at the end of the linked list is equivalent to a code path that stores new links at the beginning of the linked list. Thus, the code path selected by the designer may not have the most favorable performance characteristics for a particular client's server configuration.
To illustrate, when a problem forces the server to be powered down and rebooted, performance of startup systems become significant. Currently, servers may take hours or even days to return to service once they are powered down. Thus, designers labor to increase the speed of systems related to powering up such servers. These designers, again, must find solutions that are generally applicable to many server configurations. As a result, the designers do not look for solutions that are specifically applicable to a single server configuration.
One prominent startup system for servers is the service processor. Service processors often include a processor, memory, basic system startup code, and other supporting hardware for loading initial program loads (IPLs). IPLs provide an interface between higher-level applications and hardware of the servers. For instance, a service processor may access a hard disk drive to load a hypervisor, which is a partition manager for a logically partitioned system.
Service processors perform tasks configured for particular customer solution and may execute, for example, about 30 tasks concurrently. Each task requires some amount of memory so the service processors provide a generally applicable memory allocation function for the tasks. Memory allocation can utilize a significant portion of the time required by a service processor to boot a server. One of IBM's e-Servers operating on a KIS operating system can take, for instance, 25 minutes to load IPLs to boot the server and a significant portion of the 25 minutes is dedicated to allocating memory for the IPLs. The generally applicable memory allocation function typically implemented by service processors exudes a non-linear allocation time characteristic. In other words, the time required to allocate memory increases in a non-linear manner as the amount of memory allocated increases, which depending upon the number of allocations for a particular server, can significantly decrease performance of the boot systems for the server. However, some particular customer solutions may benefit from a different memory allocation scheme that is essentially interchangeable with the typical memory allocation scheme.
Therefore, there is a need for methods and arrangements capable of increasing efficiency of code via intelligent selection between generally equivalent code paths such as equivalent data structures and memory allocation schemes. Further, there is a particular need to increase the speed of memory allocations to IPLs during the startup of servers by selectively implementing a tunable, linear, memory allocation module in place of a default memory allocation module.